package com.keitaitoys.fonteditor.gui.preview;

import java.text.ParseException;

import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import com.keitaitoys.fonteditor.core.FontManager;
import com.keitaitoys.fonteditor.core.Manager;
import com.keitaitoys.fonteditor.font.Font;

public class SpacingSpinner extends JSpinner implements ChangeListener {

	//////////////////////////////////////////////////////////////////////
	// Description ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	// Consts ////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	// Variables /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////
	// Constructor ///////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public SpacingSpinner() {
		
		Manager manager = Manager.getInstance();
		manager.registerSpacingSpinner(this);
		
		init();
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	private void init() {
		
		setEnabled(true);
		
		SpinnerNumberModel numberModel = new SpinnerNumberModel(Font.DEFAULT_SPACING, Integer.MIN_VALUE, Integer.MAX_VALUE, 1); 
		setModel(numberModel);
		
		NumberEditor numberEditor = new NumberEditor(this);
		numberEditor.getTextField().setColumns(4);
		setEditor(numberEditor);

		Font font = FontManager.getInstance().getFont();
		setValue(font.getSpacing());

		addChangeListener(this);
	}

	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public int getSpacingValue() {
		
		try {
			commitEdit();
		} catch(ParseException e) {}

		return ((Number)getValue()).intValue();
	}
	
	//////////////////////////////////////////////////////////////////////
	// Functions /////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////

	public void stateChanged(ChangeEvent e) {
	
		Manager manager = Manager.getInstance();
		manager.executeSpacing();
	}
}